home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / recode.lha / recode-3.2.4 / cdcnasci.c < prev    next >
C/C++ Source or Header  |  1992-08-19  |  5KB  |  158 lines

  1. /* Conversion of files between different charsets and usages.
  2.    Copyright (C) 1990 Free Software Foundation, Inc.
  3.    Francois Pinard <pinard@iro.umontreal.ca>, 1988.
  4.  
  5.    This program is free software; you can redistribute it and/or modify
  6.    it under the terms of the GNU General Public License as published by
  7.    the Free Software Foundation; either version 2, or (at your option)
  8.    any later version.
  9.  
  10.    This program is distributed in the hope that it will be useful, but
  11.    WITHOUT ANY WARRANTY; without even the implied warranty of
  12.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.    General Public License for more details.
  14.  
  15.    You should have received a copy of the GNU General Public License
  16.    along with this program; if not, write to the Free Software
  17.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19.  
  20. #define STEP    cdcnos_ascii
  21. #include <stdio.h>
  22. #include "common.h"
  23.  
  24. /* Previous obsolete lex code:
  25.  
  26. @A            { output ('@'); }
  27. @B            { output ('^'); }
  28. @D            { output (':'); }
  29. @G            { output ('`'); }
  30.  
  31. \^\040            { output ('\015'); }
  32. \^!            { output ('\026'); }
  33. \^\"            { output ('\024'); }
  34. \^#            { output ('\020'); }
  35. \^$            { output ('\013'); }
  36. \^\%            { output ('\023'); }
  37. \^&            { output ('\027'); }
  38. \^'            { output ('\030'); }
  39. \^\(            { output ('\011'); }
  40. \^\)            { output ('\012'); }
  41. \^\*            { output ('\007'); }
  42. \^\+            { output ('\005'); }
  43. \^\,            { output ('\016'); }
  44. \^-            { output ('\006'); }
  45. \^\.            { output ('\017'); }
  46. \^\/            { output ('\010'); }
  47.  
  48. \^0            { output ('{'); }
  49. \^1            { output ('|'); }
  50. \^2            { output ('}'); }
  51. \^3            { output ('~'); }
  52. \^4            { output ('\177'); }
  53.  
  54. \^5            { output ('\000'); }
  55. \^6            { output ('\001'); }
  56. \^7            { output ('\002'); }
  57. \^8            { output ('\003'); }
  58. \^9            { output ('\004'); }
  59.  
  60. \^;            { output ('\037'); }
  61. \^<            { output ('\032'); }
  62. \^=            { output ('\014'); }
  63. \^>            { output ('\033'); }
  64. \^?            { output ('\031'); }
  65. \^@            { output ('\034'); }
  66.  
  67. \^[A-Z]            { output (yytext[1]-'A'+'a'); }
  68.  
  69. \^\[            { output ('\021'); }
  70. \^\\            { output ('\035'); }
  71. \^]            { output ('\022'); }
  72. \^\^            { output ('\036'); }
  73. \^_            { output ('\025'); }
  74.  
  75. \^[a-z]            { output (yytext[1]); }
  76.  
  77. */
  78.  
  79. void
  80. STEP (FILE *input_file, FILE *output_file)
  81. {
  82.   int input_char;        /* current character */
  83.  
  84.   while ((input_char = getc (input_file)) != EOF)
  85.     {
  86.       switch (input_char)
  87.     {
  88.         case '@':
  89.       switch ((input_char = getc (input_file)))
  90.         {
  91.         case 'A': case 'a': input_char = '@'; break;
  92.         case 'B': case 'b': input_char = '^'; break;
  93.         case 'D': case 'd': input_char = ':'; break;
  94.         case 'G': case 'g': input_char = '`'; break;
  95.  
  96.         default:
  97.           putc ('@', output_file);
  98.           if (input_char == EOF)
  99.         return;
  100.         }
  101.       break;
  102.  
  103.     case '^':
  104.       input_char = getc (input_file);
  105.       if (input_char >= 'A' && input_char <= 'Z')
  106.         input_char += 'a' - 'A';
  107.       else if (input_char < 'a' || input_char > 'z')
  108.         switch (input_char)
  109.           {
  110.           case ' ': input_char = '\015'; break;
  111.           case '!': input_char = '\026'; break;
  112.           case '"': input_char = '\024'; break;
  113.           case '#': input_char = '\020'; break;
  114.           case '$': input_char = '\013'; break;
  115.           case '%': input_char = '\023'; break;
  116.           case '&': input_char = '\027'; break;
  117.           case '\'': input_char = '\030'; break;
  118.           case '(': input_char = '\011'; break;
  119.           case ')': input_char = '\012'; break;
  120.           case '*': input_char = '\007'; break;
  121.           case '+': input_char = '\005'; break;
  122.           case ',': input_char = '\016'; break;
  123.           case '-': input_char = '\006'; break;
  124.           case '.': input_char = '\017'; break;
  125.           case '/': input_char = '\010'; break;
  126.           case '0': input_char = '{'; break;
  127.           case '1': input_char = '|'; break;
  128.           case '2': input_char = '}'; break;
  129.           case '3': input_char = '~'; break;
  130.           case '4': input_char = '\177'; break;
  131.           case '5': input_char = '\000'; break;
  132.           case '6': input_char = '\001'; break;
  133.           case '7': input_char = '\002'; break;
  134.           case '8': input_char = '\003'; break;
  135.           case '9': input_char = '\004'; break;
  136.           case ';': input_char = '\037'; break;
  137.           case '<': input_char = '\032'; break;
  138.           case '=': input_char = '\014'; break;
  139.           case '>': input_char = '\033'; break;
  140.           case '?': input_char = '\031'; break;
  141.           case '@': input_char = '\034'; break;
  142.           case '[': input_char = '\021'; break;
  143.           case '\\': input_char = '\035'; break;
  144.           case ']': input_char = '\022'; break;
  145.           case '^': input_char = '\036'; break;
  146.           case '_': input_char = '\025'; break;
  147.  
  148.           default:
  149.             putc ('^', output_file);
  150.             if (input_char == EOF)
  151.           return;
  152.           }
  153.       break;
  154.     }
  155.       putc (input_char, output_file);
  156.     }
  157. }
  158.